package controlador.util;

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

/**
 * Clase con la funcionalidad para realizar la 
 * Serializacion de Objetos
 * @author Paul
 *
 */
public class SerializadorObjetos {
	
	/**
	 * Serializa un Objeto Java que siga las convenciones JavaBeans,
	 * guarda el resultado en un archivo XMl que se indique.
	 * @param <T> Tipo generico
	 * @param bean Objeto a serializar.
	 * @param filePath Archivo de destino.
	 */
	public static <T> void serializeBean(T bean, String filePath) {

		XMLEncoder encoder;
		try {
			encoder = new XMLEncoder(new BufferedOutputStream(
					new FileOutputStream(filePath)));
			encoder.writeObject(bean);
			encoder.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}

	}

	/**
	 * Permite obtener un objeto a partir de un archivo XML.  
	 * @param <T> tipo de Objeto a obtener
	 * @param filePath Ruta del archivo a usar como base para deserializar.
	 * @return Java Bean, nulo si no se puedo leer el objeto o el archivo indicado no existe.
	 */
	@SuppressWarnings("unchecked")
	public static <T> T deSerializeBean(String filePath) {

		XMLDecoder decoder;
		try {
			decoder = new XMLDecoder(new BufferedInputStream(
					new FileInputStream(filePath)));

			T o = (T) decoder.readObject();
			decoder.close();
			return o;

		} catch (FileNotFoundException e) {
			return null;
		}

	}
}
